package booroo.basic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class J18_JDBCSetup {
	
	// JDBC접속정보
	private static final String DRV = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@//localhost:1521/xe";
	private static final String USR = "scott";
	private static final String PWD = "TIGER";
	
	// SQL문 작성
	private static final String insertSQL = "insert into sungjuk(sjno,name,kor,eng,mat)	values(sjno.nextval,'혜교',78,45,12)";
	private static final String selectSQL = "select * from sungjuk order by sjno desc";
	
	public static void main(String[] args) {
		// 오라클을 이용한 JDBC프로그래밍 기초
		// 1. JDBC드라이버를 메모리에 적재하여 객체로 생성하고
		// 이것을 DriverManager에 등록
		// 2. DriverManager의 getConnection메서드를 이용해서
		// 데이터베이스 연결객체를 생성함
		// 3. PreparedStatement롤 실행할 SQL문 객체를 생성
		// 4. 실행하는 SQL문이 insert,update,delete라면
		//	  executeUpdate()를 사용하고 
		//    실행결과는 int로 받음
		// 5. 실행하는 SQL문이 select라면 executeQuery()를 사용하고
		//    실행결과는 ResultSet으로 받음
		// 6. ResultSet으로 받은 결과테이블은 먼저 rs.next()로 읽어올 레코드(행)를 가리킨 후
		//    rs.getXXX(필드번호) 또는 rs.getXXX(필드이름) 으로
		//    테이블의 각 필드 값을 처리할수 있음
		// 7. JDBC작업이 끝나면 연결중인 데이터베이스 접속을 끊고 
		//    관련객체(conn,ps,rs)는 메모리에서 제거함 
		
		Connection conn = null;	// 연결객체 저장용
		PreparedStatement ps = null; // SQL객체
		ResultSet rs = null;	// 실행결과 저장용
		
		try{
		Class.forName(DRV);	// 1.
		conn = DriverManager.getConnection(URL,USR,PWD);	// 2.
		ps = conn.prepareStatement(insertSQL);	// 3.
		int cnt = ps.executeUpdate();	// 4.
		System.out.println(cnt + "건의 데이터 입력");
		
		ps.close();	// 또다른 SQL문 작성하기 위해 기존 ps객체 제거
		ps = conn.prepareStatement(selectSQL);
		rs = ps.executeQuery();
		
		// ResultSet에서 결과를 하나씩 레코드 단위로 꺼내 
		// 차례대로 출력
		while(rs.next()){	// 6.
			System.out.println(rs.getInt(1));
			System.out.println(rs.getString("name"));
		}
		} catch (Exception ex){
			ex.printStackTrace();
		} finally{	// 7.
			// JDBC작업이 끝난후 메모리에서 객체 제거
			if(rs != null)
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(ps != null)
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if(conn != null)
				try {
					conn.close();	// 데이터베이스와 연결끊기
				} catch (SQLException e) {
					e.printStackTrace();
				}
		}
		
	}

}
